﻿#define _CRT_SECURE_NO_WARNINGS

/*给定一个 n 个元素有序的（升序）整型数组 nums 和一个目标值 target  ，写一个函数搜索 nums 中的 target，如果目标值存在返回下标，否则返回 -1。

示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
*/


//#include<stdio.h>//这个代码出了点问题
//int target_search(int* nums, int numsSize, int target, int i) {
//    int l = 0;
//    int r = numsSize - 1;
//    while (l <= r)
//    {
//        i = (l + r) / 2;
//        if (nums[i] > target)
//            r = i;
//        else if (nums[i] < target)
//            l = i;
//        else if(nums[i] == target)
//            return 1;
//    }
//      return 0;
//}
//int search(int* nums, int numsSize, int target) {
//    int i = 0;
//    if (target_search(nums, numsSize, target, i) == 1)
//        return i;
//    else
//        return -1;
//}
//int main()
//{
//    int nums[] = { -1,0,3,5,9,12 };
//    int numsSize = sizeof(nums) / sizeof(nums[0]);
//    int target = 5;
//    printf("%d\n", search(nums, numsSize, target));
//    return 0;
//}


//正确
#include<stdio.h>
int search(int* nums, int numsSize, int target) {
    int i = 0;
    int l = 0;
    int r = numsSize - 1;
    while (l <= r)
    {
        i = (l + r) / 2;
        if (nums[i] > target)
            r = i - 1;
        else if (nums[i] < target)
            l = i + 1;
        else 
            return i;
    }
     return -1;
}
int main()
{
    int nums[] = { -1,0,3,5,9,12 };
    int numsSize = sizeof(nums) / sizeof(nums[0]);
    int target = 8;
    printf("%d\n", search(nums, numsSize, target));
    return 0;
}